package com.vite.common.utils.auth;

import com.vite.common.core.domain.entity.SysRole;
import com.vite.common.core.domain.entity.SysUser;
import com.vite.common.exception.ServiceException;
import com.vite.common.utils.StringUtils;

/**
 * 管理员工具类
 */
public class AdminUtils {

    /**
     * 判断用户是否可操作
     * @param user 用户
     */
    public static void checkUserAllowed(SysUser user)
    {
        if (StringUtils.isNotNull(user.getUserId()) && isAdmin(user.getUserId()))
        {
            throw new ServiceException("不允许操作超级管理员用户");
        }
    }

    /**
     * 判断用户是否可操作
     * @param userId 用户Id
     */
    public static void checkUserAllowed(Long userId)
    {
        if (StringUtils.isNotNull(userId) && isAdmin(userId))
        {
            throw new ServiceException("不允许操作超级管理员用户");
        }
    }

    /**
     * 判断角色是否可操作
     * @param role 角色
     */
    public static void checkRoleAllowed(SysRole role)
    {
        if (StringUtils.isNotNull(role.getRoleId()) && isAdmin(role.getRoleId()))
        {
            throw new ServiceException("不允许操作超级管理员用户");
        }
    }

    /**
     * 判断角色是否可操作
     * @param roleId 角色Id
     */
    public static void checkRoleAllowed(Long roleId)
    {
        if (StringUtils.isNotNull(roleId) && isAdmin(roleId))
        {
            throw new ServiceException("不允许操作超级管理员用户");
        }
    }

    /**
     * 判断用户是不是超级管理员
     * @param user 用户
     */
    public static boolean isAdmin(SysUser user)
    {
        return isAdmin(user.getUserId());
    }

    /**
     * 判断角色是不是超级管理员
     * @param role 角色
     */
    public static boolean isAdmin(SysRole role)
    {
        return isAdmin(role.getRoleId());
    }

    /**
     * 判断用户是不是超级管理员
     * @param Id {userId或roleId}
     */
    public static boolean isAdmin(Long Id)
    {
        return Id != null && 1L == Id;
    }

}
